/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador;

import Logica.Count;
import Logica.Escritor;
import Logica.Medicamento;
import Logica.Transaccion;
import accesodatos.DaoDimensiones;
import accesodatos.DaoHechos;
import java.util.ArrayList;

/**
 *
 * @author User
 */
public class ControladorAsociacion {
    DaoDimensiones daoDimensiones;
    DaoHechos daoHechos;
    Escritor escritor;
    ArrayList<Medicamento> medicamentos;
    public ControladorAsociacion(){
       daoDimensiones = new DaoDimensiones();
       daoHechos = new DaoHechos();
       escritor = new Escritor();
       medicamentos=obtenerMedicamentos();
    }

    public ArrayList<Medicamento> getMedicamentos() {
        return medicamentos;
    }

    public void setMedicamentos(ArrayList<Medicamento> medicamentos) {
        this.medicamentos = medicamentos;
    }
    
    public ArrayList<Medicamento> obtenerMedicamentos(){
        ArrayList<Medicamento> medicamentos = daoDimensiones.getNewMedicamento();
        return medicamentos;
    }
    
    public ArrayList<Transaccion> getTransacciones(){
        
        ArrayList<Transaccion> transacciones = new ArrayList<Transaccion>();
       
        ArrayList<String> tranSinProcesar = daoHechos.getTransaccion();
        for(int i=0;i<tranSinProcesar.size();i++){
            String [] medicamentosTransaccion = tranSinProcesar.get(i).split(";");
            ArrayList<Medicamento> medicamentosAux = new ArrayList<Medicamento>();
            Transaccion t=new Transaccion();
            for(int h=0; h<medicamentosTransaccion.length;h++){
                Medicamento m=buscarMedicamento(medicamentosTransaccion[h],medicamentos);
                medicamentosAux.add(m);
            }
            t.setMedicamentos(medicamentosAux);
            transacciones.add(t);
        }
        return transacciones;
        
    }
    
    public Medicamento buscarMedicamento(String code, ArrayList<Medicamento> medicamentos){
        Medicamento m = new Medicamento();
        for(int i =0; i<medicamentos.size();i++){
            if(medicamentos.get(i).getCode().equals(code)){
                m=medicamentos.get(i);
            }else ;
        }
        return m;
    }
    
    public void imprimir(ArrayList<Medicamento> cosas){
        for(int i=0;i<cosas.size()-1;i++){
           System.out.println("Posicion:" + cosas.get(i).getIndice()+" Nombre:" +cosas.get(i).getNombre());
            //System.out.println(cosas.get(1).getIndice());
        }
    }
    
    public ArrayList<String> prepararArchivo(ArrayList<Transaccion> t, ArrayList<Medicamento> m){
        ArrayList<String> lineasArff = new ArrayList<String> ();
       
        String resultado = "@relation asociacion";
        lineasArff.add(resultado);
        
        for(int i=0; i<m.size();i++){
            String nombre =m.get(i).getNombre();
            nombre = nombre.replace("Á", "A");
            nombre = nombre.replace("É", "E");
            nombre = nombre.replace("Í", "I");
            nombre = nombre.replace("Ó", "O");
            nombre = nombre.replace("Ú", "U");
            nombre = nombre.replace("Ñ", "N");
            
            String atributos="@attribute " +"'"+nombre+"'"+" " + "{ t}";
            lineasArff.add(atributos);
            //System.out.println(atributos);
        }
        lineasArff.add("@data");
        for(int i=0;i<t.size();i++){
            String [] valoresT = new String [m.size()];
            String trans="";
            int count=0;
            //Count count = new Count();
            
//            for(int h=0;i<valoresT.length;h++){
//                valoresT[i]="?";
//            }
            //System.out.println("Ciclo1 Terminado");
            ArrayList<Medicamento> medTran = t.get(i).getMedicamentos();
            for(int j=0;j<medTran.size();j++){
               // System.out.println(medTran.get(j).getNombre());
                valoresT[medTran.get(j).getIndice()]="t";
                count++;
                //System.out.println("Valor agregado:"+valoresT[medTran.get(j).getIndice()] +" En la posición: " + medTran.get(j).getIndice());
            }
            //System.out.println("Ciclo2 Terminado");
            if(count>3){
                for(int d=0;d<valoresT.length;d++){
                    if(d==valoresT.length-1){
                        if(valoresT[d]!=null)
                            trans+=valoresT[d];
                        else
                            trans+="?";

                    }else{
                        if(valoresT[d] !=null)
                           trans+=valoresT[d]+",";
                        else
                            trans+="?,";
                    }
                    //System.out.println(trans);
                }
                lineasArff.add(trans);
            }else ;
            //System.out.println(trans);
            
        }
//        for(int i=0;i<lineasArff.size();i++){
//            System.out.println(lineasArff.get(i));
//        }
        
        return lineasArff;
        
    }
    
    public String llenarLineaTransaccion(Transaccion tr, int atributos){
        String linea ="";
        return linea;
    }
    
    public void escribirArff(ArrayList<String> archivo, String nombreArchivo){
        escritor.Escribir(archivo, nombreArchivo);
    }
    
    public static void main (String [] args){
        ControladorAsociacion c = new ControladorAsociacion();
        ArrayList<Medicamento> med= c.getMedicamentos();
        //c.buscarMedicamento("1012", med);
        ArrayList<Transaccion> t = c.getTransacciones();
        ArrayList<String> arch=c.prepararArchivo(t, med);
        c.escribirArff(arch, "asociacion1.arff");
        //c.imprimir(med);
    }
}
